/************************************************************
** Archivo:		UsuarioView
** Autor:		
** Fecha:		16/05/2009 19:19:08
** Descripción:	Clase generada automáticamente
** Cliente:		SC
** Proyecto:	eWedding
************************************************************/

using System;
using System.Collections.Generic;
using System.Text;

using Circo.Framework.BusinessLogic;
using Circo.Framework.Persistencia;

using SC.eWedding.Data.Entities;


namespace SC.eWedding.BusinessLogic.Views
{
    public partial class UsuarioView : AbstractView
    {
    
        #region Private Vars

		private UsuarioEntity _usuario;

        #endregion

        #region Constructors

		
		public UsuarioView()
		{
			CrearVista(false);
		}

		public UsuarioView(bool createRelatedViews)
		{
			CrearVista(createRelatedViews);
		}

		private void CrearVista(bool createRelatedViews)
		{
			this._usuario = new UsuarioEntity();

			if (createRelatedViews)

			{

				this.Provincia = new ProvinciaView(true);

				this.Localidad = new LocalidadView(true);

			}

		}

		public UsuarioView(UsuarioEntity unaEntidad)
		{
			if (unaEntidad != null)
				this._usuario = unaEntidad;

		}



        #endregion
        
        #region Attributes

		
		public int Id
		{
			get { return this._usuario.Id; }
			set { this._usuario.Id = value; }
		}

		public string Nombre
		{
			get { return this._usuario.Nombre; }
			set { this._usuario.Nombre = value; }
		}

		public string Apellido
		{
			get { return this._usuario.Apellido; }
			set { this._usuario.Apellido = value; }
		}

		public string NombreUsuario
		{
			get { return this._usuario.NombreUsuario; }
			set { this._usuario.NombreUsuario = value; }
		}

		public string Contrasenia
		{
			get { return this._usuario.Contrasenia; }
			set { this._usuario.Contrasenia = value; }
		}


private List<ContactoView> _amigos;
		public List<ContactoView> Amigos
		{
			get
			{
				if (_amigos == null)
				{
					List<ContactoEntity> listaEntidades = this._usuario.Amigos;

					this._amigos = new List<ContactoView>();

					foreach (ContactoEntity unaEntidad in listaEntidades)

						this._amigos.Add(new ContactoView(unaEntidad));

				}
				return _amigos;
			}
			set
			{
				this._amigos = value;
				if (value != null)
				{
					List<ContactoEntity> listaEntidades = new List<ContactoEntity>();

					foreach (ContactoView unaView in value)

						listaEntidades.Add(unaView.MapToEntity());

					this._usuario.Amigos = listaEntidades;

				}
				else
				{
					this._usuario.Amigos = null;

				}
			}
		}

		public string Mail
		{
			get { return this._usuario.Mail; }
			set { this._usuario.Mail = value; }
		}

		public string DNI
		{
			get { return this._usuario.DNI; }
			set { this._usuario.DNI = value; }
		}

		public string Direccion
		{
			get { return this._usuario.Direccion; }
			set { this._usuario.Direccion = value; }
		}

		private ProvinciaView _provincia = null;
		public ProvinciaView Provincia
		{
			get
			{
				if (this._provincia == null)
				{
					if (this._usuario.Provincia != null)
						this._provincia = new ProvinciaView(this._usuario.Provincia);
				}
				return _provincia;
			}
			set
			{
				if (value != null)
				{
					this._usuario.Provincia = value.MapToEntity();
					this._provincia = new ProvinciaView(this._usuario.Provincia);
				}
				else
				{
					this._usuario.Provincia = null;
					this._provincia = null;
				}
			}
		}


private List<UsuarioBodaView> _bodas;
		public List<UsuarioBodaView> Bodas
		{
			get
			{
				if (_bodas == null)
				{
					List<UsuarioBodaEntity> listaEntidades = this._usuario.Bodas;

					this._bodas = new List<UsuarioBodaView>();

					foreach (UsuarioBodaEntity unaEntidad in listaEntidades)

						this._bodas.Add(new UsuarioBodaView(unaEntidad));

				}
				return _bodas;
			}
			set
			{
				this._bodas = value;
				if (value != null)
				{
					List<UsuarioBodaEntity> listaEntidades = new List<UsuarioBodaEntity>();

					foreach (UsuarioBodaView unaView in value)

						listaEntidades.Add(unaView.MapToEntity());

					this._usuario.Bodas = listaEntidades;

				}
				else
				{
					this._usuario.Bodas = null;

				}
			}
		}

		private LocalidadView _localidad = null;
		public LocalidadView Localidad
		{
			get
			{
				if (this._localidad == null)
				{
					if (this._usuario.Localidad != null)
						this._localidad = new LocalidadView(this._usuario.Localidad);
				}
				return _localidad;
			}
			set
			{
				if (value != null)
				{
					this._usuario.Localidad = value.MapToEntity();
					this._localidad = new LocalidadView(this._usuario.Localidad);
				}
				else
				{
					this._usuario.Localidad = null;
					this._localidad = null;
				}
			}
		}

		public TiposDNI TipoDNI
		{
			get { return (TiposDNI)this._usuario.TipoDNI; }
			set { this._usuario.TipoDNI = (short)value; }
		}

		public TipoSexo Sexo
		{
			get { return (TipoSexo)this._usuario.Sexo; }
			set { this._usuario.Sexo = (short)value; }
		}


        #endregion

        #region Mapping

		
		public UsuarioEntity MapToEntity()
		{
			return this._usuario;
		}

		public override Entity MapToBaseEntity()
		{
			return MapToEntity();
		}



        #endregion

        #region CollectionSyncro

		public override void SynchronizeCollections()
		{
			//search for deleted items
			for (int i = 0; i < this._usuario.Amigos.Count; i++)
			{
				ContactoEntity anEntity = this._usuario.Amigos[i];
				bool found = false;

				foreach (ContactoView aView in this.Amigos)
				{
					if (anEntity.Id == aView.Id)
					{
						found = true;
						break;
					}
				}

				if (!found)
				{
					this._usuario.Amigos.RemoveAt(i);
					i--;
				}
			}

			//search for added items
			for (int i = 0; i < this.Amigos.Count; i++)
			{
				ContactoView aView = this.Amigos[i];

				if (aView.Id == 0)
					this._usuario.Amigos.Add(aView.MapToEntity());
			}
			//search for deleted items
			for (int i = 0; i < this._usuario.Bodas.Count; i++)
			{
				UsuarioBodaEntity anEntity = this._usuario.Bodas[i];
				bool found = false;

				foreach (UsuarioBodaView aView in this.Bodas)
				{
					if (anEntity.Id == aView.Id)
					{
						found = true;
						break;
					}
				}

				if (!found)
				{
					this._usuario.Bodas.RemoveAt(i);
					i--;
				}
			}

			//search for added items
			for (int i = 0; i < this.Bodas.Count; i++)
			{
				UsuarioBodaView aView = this.Bodas[i];

				if (aView.Id == 0)
					this._usuario.Bodas.Add(aView.MapToEntity());
			}
		}



        #endregion
        
		#region Enums

		public enum  TiposDNI
		{
			DocExtranjero = 4,
			LE = 3,
			LC = 2,
			DNI = 1,
		}

		public enum  TipoSexo
		{
			Masculino = 2,
			Femenino = 1,
		}

		#endregion

    }
}
